package com.example.demo.annotation;

import com.example.demo.constant.LockType;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;


/**
 * 集成redisson
 * 使用spring框架的aop，自定义注解实现redis分布式锁
 * 必须是被spring容器管理的javaBean，才能让注解生效
 * @author MarioZzz
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLock {

    /**
     * 防止redis的key发生冲突，所以会对key加上一些统一的前缀，例如：insertXxx, DeleteXxx
     */
    String lockName() default "redisson_distributed_lock:";

    /**
     * 锁自动释放时间(默认30秒)
     **/
    int leaseTime() default 30000;

    /**
     * 获取锁等待时间(默认3秒)
     **/
    int waitTime() default 3000;

    /**
     * 尝试获取锁的次数
     **/
    int tryNum() default 5;

    /**
     * 时间单位
     **/
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 锁类型
     **/
    LockType LockType() default LockType.REENTRANT_LOCK;
}
